// 登录 退出登录
import { Message } from 'element-ui'
import { login, logout } from '@/api/user'
// 获取总库下可选择的子库
import { getSelectDbByParId } from '@/api/table'
// import { resetRouter } from '@/router'
// import createPersistedState from 'vuex-persistedstate'
const state = {
  token: JSON.parse(localStorage.getItem('token')), // token
  userInfo: {}, // 用户登录的基本信息
  getSelect: {}, // 这里就是总库子库的内容
  login_info: {}// 请求登录返回的信息
}
const mutations = {
  // 保存token
  setToken(state, data) {
    state.token = data
    // 将token存一份到utils/auth 做到数据持续化
    // setToken(data)
  },
  // 保存数据
  setuser(state, data) {
    state.userInfo = data
  },
  // 删除数据
  removeuser(state) {
    state.userInfo = {}
  },
  // 保存数据
  setSelect(state, data) {
    state.getSelect = data
  },
  // 清理token
  removeToken(state) {
    state.token = null
  },
  // 清理getSelect
  setgetSelect(state) {
    state.getSelect = null
  }
}
// 里面可以封装请求 各处都可以调用
const actions = {
  // 这里就是保存数据到setSelect
  newsetSelect(store, data) {
    store.commit('setSelect', data)
  },
  // 请求的方法（store，data）
  // 然后存到actions
  // 页面调用这个actions方法就可以了 页面中 使用this.$store.dispatch()调用方法
  // 然后拿到数据之后 通过store.commit（'mutations的方法名'，存的内容）存进state里面
  async login(store, data) {
    console.log('data', data)
    const res = await login(data)
    // 将数据存到本地
    console.log('将数据存到本地', res)
    // 用户名和密码不正确
    if (res.data.code === 0) {
      state.login_info = res.data
      console.log(res.data.msg)
      return
    } else {
      state.login_info = res.data
    }
    // 如果用户有上一次的数据 那么就把用户上一次的数据存起来
    if (res.data.data.userinfo.default_database_show_id !== 0) {
      console.log(' 如果用户有上一次的数据 那么就把用户上一次的数据存起来', res.data.data.userinfo.default_database_show_id)
      localStorage.setItem('database_id', JSON.stringify(res.data.data.userinfo.default_database_show_id))
      // console.log('state.getSelect', state.getSelect.length)
      // 这里就是获取数据库总库内容存起来
      console.log('hasOwnProperty()hasOwnProperty()', state.getSelect)
      if (state.getSelect === null) {
        console.log('进来了11111111111111111111111111111', state.getSelect)
        const list = await getSelectDbByParId({ database_id: res.data.data.userinfo.default_database_show_id })
        console.log('listttttttttttt', list)
        if (list !== null) {
          localStorage.setItem('getSelect', JSON.stringify(list))
          store.commit('setSelect', list)
        }
      }
    }
    // 保存用户基本信息到本地
    await store.commit('setuser', res.data.data.userinfo)
    // 保存token
    await store.commit('setToken', res.data.data.userinfo.token)
    localStorage.setItem('token', JSON.stringify(res.data.data.userinfo.token))
    localStorage.setItem('userinfo', JSON.stringify(res.data.data.userinfo))
  },
  // 退出登录
  logout(store) {
    // console.log('Message', Message)

    // 退出登录
    logout().then((res) => {
      console.log(res, '退出登录')
      if (res.data.code === 1) {
        // 清理token
        store.commit('removeToken')
        store.commit('removeuser')
        store.commit('setgetSelect')
        // store.commit('deletedDatas')
        // resetRouter()
        // // 清空database里面的内容
        store.dispatch('database/deletedData', [], { root: true })
        // // 清空management里面的数据
        store.dispatch('management/removemanagement', [], { root: true })
        // 清空medicalDetails里面的数据
        store.dispatch('medicalDetails/deletedDatas', [], { root: true })
        // loglevel:webpack-dev-server
        // 清理缓存
        // sessionStorage.clear()
        window.localStorage.removeItem('loglevel:webpack-dev-server')
        window.localStorage.removeItem('database_id')
        window.localStorage.removeItem('getSelect')
        window.localStorage.removeItem('vuex')
        window.localStorage.removeItem('token')
        window.localStorage.removeItem('userinfo')

        localStorage.clear()
      } else {
        Message.error('退出失败')
      }
    }).catch((err) => {
      Message.error(err.msg)
    })
    // console.log('退出登录',res, res)
  }

}
export default {
  namespaced: true,
  state,
  mutations,
  actions
  // plugins: [createPersistedState({ storage: window.sessionStorage })]
}

